package com.gustavo.sistema.bean;

import java.io.Serializable;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

import com.gustavo.sistema.model.Produto;
import com.gustavo.sistema.service.ErroNaFaseService;
import com.gustavo.sistema.service.ProdutoService;

@Named("produtoBean")
@SessionScoped
public class ProdutoBean implements Serializable{

	@Inject
	private ProdutoService produtoService;

	private List<Produto> produtos;

	private Produto produto;

	private boolean alterar;

	/**
	 * Obtem a lista de produtos
	 * 
	 * @return Lista de produtos
	 * @throws ErroNaFaseBean
	 */
	public List<Produto> getAlunos() throws ErroNaFaseBean {
		try {
			if (produtos == null) {
				produtos = produtoService.listarProdutos();
			}
			return produtos;
		} catch (ErroNaFaseService e) {
			throw new ErroNaFaseBean(e);
		}
	}

	/**
	 * Abre a tela de edi��o de produto
	 * 
	 * @param produto
	 *            Produto a editar
	 * 
	 */
	public String alterar(Produto produto) {
		this.produto = produto;
		this.alterar = true;
		return "editar_produto";
	}

	/**
	 * Exclui um produto
	 * 
	 * @param produto
	 *            produto para excluir
	 * @throws ErroNaFaseBean
	 */
	public String excluir(Produto produto) throws ErroNaFaseBean {
		try {
			produtoService.excluir(produto.getId());
			produto = null;

			// Apos a exclusao, faz um redirect
			return "listar_produto?faces-redirect=true";
		} catch (ErroNaFaseService e) {
			throw new ErroNaFaseBean(e);
		}
	}

	/**
	 * Cadastra ou atualiza um produto (depende do estado da flag 'alterar')
	 * 
	 * @throws ErroNaFaseBean
	 */
	public String salvar() throws ErroNaFaseBean {
		try {
			if (alterar) {
				produtoService.atualizar(produto);
			} else {
				produtoService.inserir(produto);
			}
			produto = null;
			produtos = null;
			alterar = false;
			return "listar_produtos?faces-redirect=true";
		} catch (ErroNaFaseService e) {
			throw new ErroNaFaseBean(e);

		}
	}

	public Produto getproduto() {
		if (produto == null) {
			produto = new Produto();
		}
		return produto;
	}

	public void setproduto(Produto produto) {
		this.produto = produto;
	}

	public boolean isAlterar() {
		return alterar;
	}

	public void setAlterar(boolean alterar) {
		this.alterar = alterar;
	}

}
